#include <stdio.h>
#include <string.h>
#include"Sql_list.h"

// 初始化静态表
void Init_Sql_List(Sql_list * L)
{
    // 对创建的数据做清空
    memset(L->data , 50 * sizeof(L->data[0]) , 0);
    // 初始化表的长度 len
    L->len = 0;
}

// 尾插操作
void tail_insert_list(Sql_list *L, Elenemt_data data)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表 为 满 \n");
        return ;
    }

    // 插入
    L->data[L->len] = data;
    // 迭代
    L->len++;

}

// 尾删操作
void tail_del_list(Sql_list *L)
{
    if (NULL == L)
    {
        printf("顺序表为 NULL\n");
        return;
    }
    if (0 >= L->len)
    {
        printf("顺序表内无数据\n");
        return;
    }

    L->len--; // 删除尾部元素，更新长度
}

//任意位置插入
void pos_insert_list(Sql_list *L, int index, Elenemt_data data)
{
     if (NULL == L)
    {
        printf("顺序表为 NULL\n");
        return;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表已满\n");
        return;
    }
    L->len++;
    for (size_t i = index; i < L->len; i++)
    {
        L->data[i] = L->data[i-1];
    }
    L->data[index-1]=data;
}
//任意位置删除
void pos_del_list(Sql_list *L, int index)
{
    if (NULL == L)
    {
        printf("顺序表为 NULL\n");
        return;
    }
    if (0 >= L->len)
    {
        printf("顺序表内无数据\n");
        return;
    }
    L->len--;
    for (size_t i = index-1; i < L->len; i++)
    {
        L->data[i] = L->data[i+1];
    }
}


// 遍历打印静态表内容
void printf_Sql_List(Sql_list *L)
{
    if (NULL == L)
    {
        printf("顺序表为 NULL\n");
        return;
    }
    if (0 == L->len)
    {
        printf("顺序表内无数据\n");
        return;
    }

    for (size_t i = 0; i < L->len; i++)
    {
        printf("姓名：%s 性别：%s 年龄：%d 成绩：%d 学号：%d\n",
               L->data[i].name, L->data[i].sex, L->data[i].age,
               L->data[i].sco, L->data[i].id);
    }
}

// 查找指定索引的元素
Elenemt_data *find_by_index(Sql_list *L, int index)
{
    if (index < 0 || index >= L->len)
    {
        printf("Error: Index out of range.\n");
        return NULL; // 返回错误值
    }
    return &L->data[index]; // 返回元素的地址
}

// 查找指定名称的元素
int find_by_name(Sql_list *L, char *name)
{
    for (int i = 0; i < L->len; i++)
    {
        if (strcmp(L->data[i].name, name) == 0)
        {
            return i; // 返回找到的元素的索引
        }
    }

    printf("Error: Name not found.\n");
    return -1; // 返回错误值
}


